Lambda 関数を利用して暗号化 EBS を使用する EC2 インスタンスが起動できない場合の対処法

Lambda 関数を利用して暗号化 EBS を使用する EC2 インスタンスが起動できない場合の対処法

Clock Icon2025.01.20

困っていること

EC2 インスタンスの起動を Lambda 関数で自動化しようとしたところ、起動に失敗します。
なお、Lambada 関数は成功しておりエラーは見受けられません。対処法を教えてください。

どう対応すればいいの?

起動予定の EC2 インスタンスにアタッチしている EBS が KMS (CMK) で暗号化されているかご確認ください。
また、CloudTrail で該当 Lambda 関数実行日時を調査してください。
以下のようにイベント名 CreateGrant で AccessDenied エラーが発生していることが想定されます。

※ 一部マスクします

    "eventSource": "kms.amazonaws.com",
    "eventName": "CreateGrant",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "ec2-frontend-api.amazonaws.com",
    "userAgent": "ec2-frontend-api.amazonaws.com",
    "errorCode": "AccessDenied",
    "errorMessage": "User: arn:aws:sts::xxxxxxxxxxx:assumed-role/Test-role-xxxxxxx/Test-Lambda is not authorized to perform: kms:CreateGrant on resource: arn:aws:kms:ap-northeast-1:xxxxxxxxxxxx:key/43210987-9999-7777-xxxx-f42aaaaaaaaa because no identity-based policy allows the kms:CreateGrant action",
    "requestParameters": null,

上記のように、カスタマーマネージドキー(CMK)を使用している場合、対象 Lambda 関数にアタッチしているロールに以下のポリシーを追加してください。
ポリシー追加後、想定通りに EC2 インスタンスが起動可能かお試しください。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "kms:CreateGrant"
            ],
            "Resource": "*"
        }
    ]
}

※ 適宜修正してください
"Resource"句には、EBS 暗号化に使用している CMK の ARN を記述することをお勧めします。

01111

参考資料

EC2 インスタンスを起動するための IAM と KMS の許可の問題をトラブルシューティングする | AWS re:Post

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.